package fr.auzaiphe.admin.view;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.SpringLayout;
import javax.swing.JTextPane;

import java.awt.BorderLayout;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.StringTokenizer;

import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JButton;

import org.hsqldb.types.TimestampData;

import com.sun.xml.internal.bind.v2.runtime.reflect.opt.Const;

import fr.auzaiphe.admin.constantes.ConstantesAdmin;
import fr.auzaiphe.admin.controller.AdminController;
import fr.auzaiphe.admin.model.Chrono;
import fr.auzaiphe.admin.model.ChronoGeneral;
import fr.auzaiphe.admin.model.Contenu;
import fr.auzaiphe.admin.model.Joueur;

public class AjouterAlerteFrame extends JFrame
{
	private AdminController controller;
	
	private JTextField textTitre;
	private JTextField textFieldHeures;
	private JTextField textFieldMinutes;
	private JTextField textFieldSecondes;
	private JTextField textFieldAjouter;
	private SpringLayout layout;
	private JLabel textPTitre;
	private JLabel texteJoueurCibler;
	private JComboBox choixJoueur;
	private JLabel texteContenu;
	private JTextArea zoneTexteContenu;
	private JScrollPane scrollPaneContenu;
	private JLabel texteActiverhms;
	private JLabel texteCompteur;
	private JComboBox comboBoxCompteur;
	private JButton buttonAjouter;
	private JButton buttonValider;

	private ArrayList<String> joueurs;
	
	private int id;
	
	public AjouterAlerteFrame( AdminController pController, ArrayList<String> pJoueurs )
	{
		this.controller = pController;
		this.joueurs = pJoueurs;
		this.creerFenetreAlerte();
		this.listenerAlerteAdd();
	}
	
	public AjouterAlerteFrame( 
			int pId,
			AdminController pController, 
			ArrayList<String> pJoueurs, 
			String pTitre,
			boolean pCibleAdmin,
			boolean pCibleAll,
			Joueur pCible,
			Chrono pChronoCible,
			int pActivation,
			Contenu pContenu)
	{
		this.controller = pController;
		this.joueurs = pJoueurs;
		this.creerFenetreAlerte();
		this.listenerAlerteUpdate(pId);
		this.textTitre.setText(pTitre);
		//met la combobox choixJoueur sur l'index approprié
		if(pCibleAll)
			this.choixJoueur.setSelectedIndex(0);
		else if (pCibleAdmin)
			this.choixJoueur.setSelectedIndex(1);
		else
		{
			int i = 2;
			for (String s : pJoueurs)
			{
				if((s.split(" ")[0]).equals(pCible.getNomPersonnage()) && (s.split(" ")[1]).equals(pCible.getPrenomPersonnage()))
				{
					this.choixJoueur.setSelectedIndex(i);
					break;
				}
				++i;
			}
		}
		this.zoneTexteContenu.setText(pContenu.getTexte());
		this.textFieldHeures.setText((pActivation/3600)+"");
		this.textFieldMinutes.setText(((pActivation%3600)/60)+"");
		this.textFieldSecondes.setText((pActivation%60)+"");
		if(pChronoCible instanceof ChronoGeneral)
			this.comboBoxCompteur.setSelectedIndex(0);
		else
		{
			int i = 1;
			for(String j : this.joueurs)
			{
				if(this.controller.getJoueur(j.split(" ")[0],j.split(" ")[1]).getChrono() == pChronoCible)
				{
					this.comboBoxCompteur.setSelectedIndex(i);
					break;
				}
				++i;
			}
		}
		this.textFieldAjouter.setText(pContenu.getLienFichier());
	}
	
	private void creerFenetreAlerte()
	{
		
		this.setTitle("Murder Party - Ajouter/Modifier Alerte");
		this.setSize(600, 500);
		this.layout = new SpringLayout();
		this.getContentPane().setLayout(layout);
		
		this.textPTitre = new JLabel();
		this.textPTitre.setText(ConstantesAdmin.AJOUT_ALERTE_TITRE);
		this.layout.putConstraint(SpringLayout.NORTH, textPTitre, 19, SpringLayout.NORTH, getContentPane());
		this.layout.putConstraint(SpringLayout.WEST, textPTitre, 80, SpringLayout.WEST, getContentPane());
		this.getContentPane().add(this.textPTitre);
		
		this.textTitre = new JTextField();
		layout.putConstraint(SpringLayout.WEST, this.textTitre, 200, SpringLayout.WEST, getContentPane());
		layout.putConstraint(SpringLayout.EAST, this.textTitre, -120, SpringLayout.EAST, getContentPane());
		layout.putConstraint(SpringLayout.SOUTH, this.textTitre, 0, SpringLayout.SOUTH, this.textPTitre);
		this.getContentPane().add(this.textTitre);
		
		this.texteJoueurCibler = new JLabel();
		this.layout.putConstraint(SpringLayout.NORTH, texteJoueurCibler, 50, SpringLayout.NORTH, getContentPane());
		this.layout.putConstraint(SpringLayout.WEST, texteJoueurCibler, 80, SpringLayout.WEST, getContentPane());
		this.texteJoueurCibler.setText(ConstantesAdmin.AJOUT_ALERTE_CIBLE);
		this.getContentPane().add(texteJoueurCibler);
		
		this.choixJoueur  = new JComboBox();
		layout.putConstraint(SpringLayout.NORTH, choixJoueur, 0, SpringLayout.NORTH, texteJoueurCibler);
		layout.putConstraint(SpringLayout.WEST, choixJoueur, 200, SpringLayout.WEST, getContentPane());
		this.choixJoueur.setModel(new DefaultComboBoxModel(new String[] {ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[0],ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[1]}));
		for(String j : this.joueurs)
			this.choixJoueur.addItem(j);
		this.choixJoueur.setToolTipText("");
		this.getContentPane().add(choixJoueur);
		
		this.texteContenu = new JLabel();
		this.texteContenu.setText(ConstantesAdmin.AJOUT_ALERTE_CONTENU);
		this.layout.putConstraint(SpringLayout.NORTH, texteContenu, 19, SpringLayout.SOUTH, texteJoueurCibler);
		this.layout.putConstraint(SpringLayout.WEST, texteContenu, 0, SpringLayout.WEST, texteJoueurCibler);
		this.getContentPane().add(texteContenu);
		
		this.zoneTexteContenu =new JTextArea();
		this.scrollPaneContenu = new JScrollPane(zoneTexteContenu);
		layout.putConstraint(SpringLayout.WEST, scrollPaneContenu, 200, SpringLayout.WEST, getContentPane());
		layout.putConstraint(SpringLayout.EAST, scrollPaneContenu, -120, SpringLayout.EAST, getContentPane());
		layout.putConstraint(SpringLayout.WEST, choixJoueur, 0, SpringLayout.WEST, scrollPaneContenu);
		this.layout.putConstraint(SpringLayout.NORTH, scrollPaneContenu, 0, SpringLayout.NORTH, texteContenu);
		this.layout.putConstraint(SpringLayout.SOUTH, scrollPaneContenu, -200, SpringLayout.SOUTH, getContentPane());
		this.getContentPane().add(scrollPaneContenu,BorderLayout.CENTER);
		
		
		this.texteActiverhms = new JLabel();
		this.layout.putConstraint(SpringLayout.WEST, texteActiverhms, 0, SpringLayout.WEST, texteJoueurCibler);
		this.layout.putConstraint(SpringLayout.SOUTH, texteActiverhms, -157, SpringLayout.SOUTH, getContentPane());
		this.texteActiverhms.setText(ConstantesAdmin.AJOUT_ALERTE_ACTIVATION);
		this.getContentPane().add(texteActiverhms);
		
		this.textFieldHeures = new JTextField();
		this.layout.putConstraint(SpringLayout.NORTH, textFieldHeures, 23, SpringLayout.SOUTH, scrollPaneContenu);
		this.layout.putConstraint(SpringLayout.WEST, textFieldHeures, 200, SpringLayout.WEST, getContentPane());
		this.layout.putConstraint(SpringLayout.EAST, textFieldHeures, 230, SpringLayout.WEST, getContentPane());
		this.textFieldHeures.setText("00");
		this.getContentPane().add(textFieldHeures);
		this.textFieldHeures.setColumns(10);
		
		this.textFieldMinutes = new JTextField();
		this.layout.putConstraint(SpringLayout.NORTH, textFieldMinutes, 23, SpringLayout.SOUTH, scrollPaneContenu);
		this.layout.putConstraint(SpringLayout.WEST, textFieldMinutes, 20, SpringLayout.EAST, textFieldHeures);
		this.layout.putConstraint(SpringLayout.EAST, textFieldMinutes, 50, SpringLayout.EAST, textFieldHeures);
		this.textFieldMinutes.setText("00");
		this.textFieldMinutes.setColumns(10);
		this.getContentPane().add(textFieldMinutes);
		
		this.textFieldSecondes = new JTextField();
		this.layout.putConstraint(SpringLayout.NORTH, textFieldSecondes, 23, SpringLayout.SOUTH, scrollPaneContenu);
		this.layout.putConstraint(SpringLayout.WEST, textFieldSecondes, 20, SpringLayout.EAST, textFieldMinutes);
		this.layout.putConstraint(SpringLayout.EAST, textFieldSecondes, 51, SpringLayout.EAST, textFieldMinutes);
		this.textFieldSecondes.setText("00");
		this.textFieldSecondes.setColumns(10);
		this.getContentPane().add(textFieldSecondes);
		
		this.texteCompteur = new JLabel();
		this.texteCompteur.setText(ConstantesAdmin.AJOUT_ALERTE_CHRONO);
		this.layout.putConstraint(SpringLayout.NORTH, texteCompteur, 18, SpringLayout.SOUTH, texteActiverhms);
		this.layout.putConstraint(SpringLayout.WEST, texteCompteur, 0, SpringLayout.WEST, texteJoueurCibler);
		this.getContentPane().add(texteCompteur);
		
		this.comboBoxCompteur = new JComboBox();
		this.comboBoxCompteur.setModel(new DefaultComboBoxModel(new String[] {ConstantesAdmin.AJOUT_ALERTE_CHRONO_GENERAL}));
		this.layout.putConstraint(SpringLayout.NORTH, comboBoxCompteur, 0, SpringLayout.NORTH, texteCompteur);
		this.layout.putConstraint(SpringLayout.WEST, comboBoxCompteur, 0, SpringLayout.WEST, textFieldHeures);
		for(String j : this.joueurs)
			this.comboBoxCompteur.addItem(j);
		this.getContentPane().add(comboBoxCompteur);
		
		this.buttonAjouter = new JButton(ConstantesAdmin.BOUTON_CHARGER_MEDIA);
		layout.putConstraint(SpringLayout.WEST, buttonAjouter, 0, SpringLayout.WEST, textPTitre);
		this.getContentPane().add(buttonAjouter);
		this.buttonAjouter.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				AjouterAlerteFrame.this.controller.parcourir(AjouterAlerteFrame.this.textFieldAjouter);
			}
		});
		
		this.buttonValider = new JButton(ConstantesAdmin.AJOUT_ALERTE_VALIDER);
		layout.putConstraint(SpringLayout.NORTH, buttonValider, 18, SpringLayout.SOUTH, buttonAjouter);
		this.layout.putConstraint(SpringLayout.WEST, buttonValider, 0, SpringLayout.WEST, texteJoueurCibler);
		this.getContentPane().add(buttonValider);
		
		
		
		this.textFieldAjouter = new JTextField();
		layout.putConstraint(SpringLayout.WEST, textFieldAjouter, 200, SpringLayout.WEST, getContentPane());
		layout.putConstraint(SpringLayout.EAST, textFieldAjouter, -120, SpringLayout.EAST, getContentPane());
		layout.putConstraint(SpringLayout.NORTH, buttonAjouter, 0, SpringLayout.NORTH, textFieldAjouter);
		layout.putConstraint(SpringLayout.SOUTH, buttonAjouter, 0, SpringLayout.SOUTH, textFieldAjouter);
		this.layout.putConstraint(SpringLayout.NORTH, textFieldAjouter, 17, SpringLayout.SOUTH, comboBoxCompteur);
		this.getContentPane().add(textFieldAjouter);
		this.textFieldAjouter.setColumns(10);

	}
	
	private void listenerAlerteAdd()
	{
		this.buttonValider.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				AdminPanel.netoyerInputEntier(AjouterAlerteFrame.this.textFieldHeures);
				AdminPanel.netoyerInputEntier(AjouterAlerteFrame.this.textFieldMinutes);
				AdminPanel.netoyerInputEntier(AjouterAlerteFrame.this.textFieldSecondes);
				String nomPrenom = (String)AjouterAlerteFrame.this.choixJoueur.getSelectedItem();
				String chrono = (String)AjouterAlerteFrame.this.comboBoxCompteur.getSelectedItem();
				//Si ADMIN ou TOUS n'est pas selectionné, c'est un joueur
				String[] emptySplitted = {"",""};
				String[] splittedJoueur = 
					(!(nomPrenom==ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[0] || nomPrenom== ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[1]))?
						nomPrenom.split(" ")
						:
						emptySplitted;
				String[] splittedChrono = 
					(chrono != ConstantesAdmin.AJOUT_ALERTE_CHRONO_GENERAL)?
						chrono.split(" ")
						:
						emptySplitted;
				AjouterAlerteFrame.this.controller.addAlerte(
						nomPrenom==ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[0],
						nomPrenom==ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[1], 
						splittedJoueur[0],
						splittedJoueur[1], 
						splittedChrono[0], 
						splittedChrono[1],
						Integer.parseInt(AjouterAlerteFrame.this.textFieldHeures.getText())*3600 +
						Integer.parseInt(AjouterAlerteFrame.this.textFieldMinutes.getText())*60 +
						Integer.parseInt(AjouterAlerteFrame.this.textFieldSecondes.getText()),
						AjouterAlerteFrame.this.textTitre.getText(),
						AjouterAlerteFrame.this.zoneTexteContenu.getText(), 
						AjouterAlerteFrame.this.textFieldAjouter.getText());
				AjouterAlerteFrame.this.dispose();
			}
		});
	}
	
	private void listenerAlerteUpdate(int pId)
	{
		this.id = pId;
		this.buttonValider.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent arg0)
			{
				AdminPanel.netoyerInputEntier(AjouterAlerteFrame.this.textFieldHeures);
				AdminPanel.netoyerInputEntier(AjouterAlerteFrame.this.textFieldMinutes);
				AdminPanel.netoyerInputEntier(AjouterAlerteFrame.this.textFieldSecondes);
				String nomPrenom = (String)AjouterAlerteFrame.this.choixJoueur.getSelectedItem();
				String chrono = (String)AjouterAlerteFrame.this.comboBoxCompteur.getSelectedItem();
				//Si ADMIN ou TOUS n'est pas selectionné, c'est un joueur
				String[] emptySplitted = {"",""};
				String[] splittedJoueur = 
					(!(nomPrenom==ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[0] || nomPrenom== ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[1]))?
						nomPrenom.split(" ")
						:
						emptySplitted;
				String[] splittedChrono = 
					(chrono != ConstantesAdmin.AJOUT_ALERTE_CHRONO_GENERAL)?
						chrono.split(" ")
						:
						emptySplitted;
				AjouterAlerteFrame.this.controller.updateAlerte(
						AjouterAlerteFrame.this.id,
						nomPrenom==ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[0],
						nomPrenom==ConstantesAdmin.AJOUT_ALERTE_CHOIX_CIBLE[1], 
						splittedJoueur[0],
						splittedJoueur[1], 
						splittedChrono[0], 
						splittedChrono[1],
						Integer.parseInt(AjouterAlerteFrame.this.textFieldHeures.getText())*3600 +
						Integer.parseInt(AjouterAlerteFrame.this.textFieldMinutes.getText())*60 +
						Integer.parseInt(AjouterAlerteFrame.this.textFieldSecondes.getText()),
						AjouterAlerteFrame.this.textTitre.getText(),
						AjouterAlerteFrame.this.zoneTexteContenu.getText(), 
						AjouterAlerteFrame.this.textFieldAjouter.getText());
				AjouterAlerteFrame.this.dispose();
			}
		});
	}
}
